/**
 * 
 * @author aj60940	Mathieu Lavallee
 *
 * @version 1.0
 * 
 * Carnet:
 * tout les commandes passer par les clients
 * (vector de commande)
 */

package carnetCommandes;

import java.util.Iterator;
import java.util.Vector;

public class CarnetCommande {

	private Vector<Commande> carnetCommande;

	 private static CarnetCommande instance;

	private CarnetCommande() {
		carnetCommande = new Vector<Commande>();
	}

	
	  /**Permet de prendre l<instance du carnet
	  
	  @return l<instance du carnet
	  */
	  public static CarnetCommande getInstance(){
	  
	  if (instance == null) instance = new CarnetCommande();
	 
	  return instance; }
	 

	/**
	 * Ajoute une commande au carnet
	 * 
	 * @param uneCommande
	 */
	public void ajouteCommande(Commande uneCommande) {
		carnetCommande.addElement(uneCommande);
	}

	/**
	 * getCommande
	 * 
	 * @param commande
	 *            (Commande)
	 * @return la commande demander
	 * @throws Exception
	 */
	public Commande getCommande(Commande commande) throws Exception {

		Commande c;
		try {
			c = carnetCommande.get(carnetCommande.indexOf(commande));

		} catch (Exception e) {
			throw new Exception(
					"Aucun commande retourne, commande inexistante !");

		}

		return c;
	}

	/**
	 * getCommande
	 * 
	 * @param index
	 *            (Integer)
	 * @return la commande demander
	 * @throws Exception
	 */
	public Commande getCommande(int index) throws Exception {
		Commande c;

		try {
			c = carnetCommande.get(index);

		} catch (Exception e) {
			throw new Exception("Aucun commande retourne, index invalide !");

		}

		return c;
	}

	/**
	 * retourne et retire la commande du carnet
	 * 
	 * @param Commande
	 *            voulu
	 * @return la commande demander
	 * @throws Exception
	 */
	public Commande getRemoveCommande(Commande commande) throws Exception {

		Commande c;
		try {
			c = carnetCommande.get(carnetCommande.indexOf(commande));
			carnetCommande.remove(commande);

		} catch (Exception e) {
			throw new Exception(
					"Aucun commande retourne, commande inexistante !");
		}

		return c;
	}

	/**
	 * retourne et retire la commande du carnet
	 * 
	 * @param index
	 * @return
	 * @throws Exception
	 */
	public Commande getRemoveCommande(int index) throws Exception {

		Commande c;
		try {
			c = carnetCommande.get(index);
			carnetCommande.remove(index);

		} catch (Exception e) {
			throw new Exception(
					"Aucun commande retourne, commande inexistante !");

		}
		return c;

	}

	/**
	 * detruitCommande
	 * 
	 * @param commande
	 * @throws Exception
	 */
	public void detruireCommande(Commande commande) throws Exception {

		if (carnetCommande.remove(commande) == false) {
			throw new Exception(
					"Aucune Commande supprime, commande inexistante !");
		}
	}

	/**
	 * detruire commande
	 * 
	 * @param index
	 *            (Integer)
	 * @throws Exception
	 */
	public void detruireCommande(int index) throws Exception {
		// if (carnetCommande.size()>=index)
		try {
			carnetCommande.remove(index);
		} catch (Exception e) {
			throw new Exception("Aucune commande supprime, index invalide !");
		}
	}

	public Vector<Commande> getCarnet() {
		return carnetCommande;

	}
	/**
	 * getListCommandeConfirmerClient
	 * 
	 * @return un vector de commande confirmer par les clients
	 */
	public Vector<Commande> getListCommandeConfirmerClient(){
		Vector<Commande> v = new Vector<Commande>();
		
		//v =carnetCommande;
		Iterator<Commande> itr = carnetCommande.iterator();
		while (itr.hasNext()) {
			Commande i = itr.next();
			if (i.estConfirmerParClient() && (!(i.estConfirmerParLivreur())) ){
				v.add(i);}
		}
		
		return v;
		
	}

	/**
	 * getListCommandeConfirmerLivreur
	 * 
	 * @return un vector de commande confirmer par les Livreurs
	 */
	public Vector<Commande> getListCommandeConfirmerLivreur(){
		Vector<Commande> v = new Vector<Commande>();
		
		v =carnetCommande;
		Iterator<Commande> itr = carnetCommande.iterator();
		while (itr.hasNext()) {
			Commande i = itr.next(); 
			if (i.estConfirmerParLivreur() && (i.estConfirmerParClient()) ){
				v.add(i);}
		}
		
		return v;
		
	}
	
	/**
	 * IMPRIME TOUR LE CONTENU DU carnet - la grandeur - contenu de chaque
	 * Commande
	 */
	public String toString() {

		String str = "********************************* \n"
				+ "PRINT DU CARNET \n" + "Le carnet a " + carnetCommande.size()
				+ " commande(s) incrite(s) \n" + "Les voici : \n";

		Iterator<Commande> itr = carnetCommande.iterator();
		while (itr.hasNext()) {
			str = str.concat(itr.next().toString());
		}

		return str;
		// for(int index=0; index < carnetCommande.size(); index++)
		// System.out.println( .get(index));

	}

}
